package Fisica.Stock;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Fisica.Conexion;
import Logica.Cooperativa.Articulo;
import Logica.Cooperativa.Deposito;
import Logica.Cooperativa.Operador;

public class FisicaStock {
	/*
	 * INSERT:
		INSERT INTO fac_mov_art2_capturador 
					(codigo2,descri2,fecha2,compra2,venta2,comprobante2,tipocomp2,ctacte2,deposito2,hora2,operador_codigo)
		VALUES (11296, 'CHOCOLATE MILKA OREO LECHE', '2014/08/22', 5, 0, 0, 'stock inicial', 'capturador', 0, '11:11:20.00', 5);
		*/
	
	public String INSERTARTICULO; 
	public String UPDATEARTICULO;		
			
	public static ResultSet rs;
	public static PreparedStatement st;
	public static Connection con;
	
	
	public static void close(ResultSet rs, PreparedStatement st, Connection con)
	{
	    if (rs!=null)
	    {
	        try
	        {   rs.close();
	        }catch(SQLException e)
	        { 	e.printStackTrace();
	        }
	    }
	    if (st != null)
	    {
	        try
	        {   st.close();
	        } catch (SQLException e)
	        {  	e.printStackTrace();
	        }
	    }
	    if (con != null)
	    {
	        try
	        {con.close();
	        } catch (SQLException e)
	        {	e.printStackTrace();
	        }
	    }
	}
	
	
	public static List<Operador> lisOperador (){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Operador> lista = new ArrayList();	
		String sql = "select * from operadores where operador_observa = 'activo' and operador_apellido <> 'ADMINISTRADOR';";
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			
			Operador a;
			while (rs.next()){
				a = new Operador(); 
				a.setCodigo(rs.getString(1)); 				System.out.print("codigo: "+a.getCodigo());
				a.setApellido(rs.getString(2));				System.out.print(", apellido: "+a.getApellido());
				a.setCateg(rs.getInt(3));					System.out.print(", categoria: "+a.getCateg());
				a.setClave(rs.getString(4));			 	System.out.print(", clave: "+a.getClave());
				a.setObserva(rs.getString(5));				System.out.print(", observa: "+a.getObserva());
				a.setAcceso(rs.getString(6));				System.out.print(", acceso: "+a.getAcceso()+"\n");				
				
				lista.add(a);
				}
			close(rs, st, con);
			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 		
		return lista;		
	}
	
	public static List<Deposito> lisDeposito (){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Deposito> lista = new ArrayList();	
		Deposito d1, d2;
		d1 = new Deposito(0, "Minorista");
		d2 = new Deposito(1, "Mayorista");
		lista.add(d1);
		lista.add(d2);
		
		return lista;		
	}
	
	
	public static int insertarArticulo(Articulo a){
		String SELECTARTICULO = "select * from fac_mov_art2_capturador where codigo2 = "+a.getCodInterno()+" and deposito2 = "+a.getDeposito()+";";
		
		String INSERTARTICULO = "INSERT INTO fac_mov_art2_capturador "
				+ "(codigo2,descri2,fecha2,compra2,venta2,comprobante2,tipocomp2,ctacte2,deposito2,hora2,operador_codigo) "
				+ "VALUES ('"+a.getCodInterno()+"', '"+a.getDescripcion()+"', '"+a.getFecha()+"', "+a.getCompra()+", 0, 0, 'stock inicial', 'capturador', "+a.getDeposito()+", '"+a.getHora()+"', '"+a.getOperadorCodigo()+"');";
		
		//String INSERTARTICULO = "INSERT INTO fac_mov_art2_capturador (codigo2,descri2,fecha2,compra2,venta2,comprobante2,tipocomp2,ctacte2,deposito2,hora2,operador_codigo) VALUES ('1111', 'probando', '2015/05/14', , 0, 0, 'stock inicial', 'capturador', 0, '10:10:10', '7');";
		
//		String UPDATEARTICULO = "UPDATE fac_mov_art2_capturador SET compra2 = (compra2 + "+a.getCompra()+"), fecha2 = '"+a.getFecha()+"', hora2 = '"+a.getHora()+"' WHERE codigo2 = "+a.getCodInterno()+";";
		String UPDATEARTICULO = "UPDATE fac_mov_art2_capturador SET compra2 = (compra2 + "+a.getCompra()+") WHERE codigo2 = "+a.getCodInterno()+";";
		try {
			con = Conexion.getConexion();
			PreparedStatement stSelect = con.prepareStatement(SELECTARTICULO);	
			ResultSet rsSelect = stSelect.executeQuery();		
			
			boolean existencia =  rsSelect.next();
			
			float tenia = 0.00f; //cuantas unidades tenia cargadas antes de insertar o actualizar
			int orden;
			if (!existencia){
				st = con.prepareStatement(INSERTARTICULO);	
				st.executeUpdate();
				orden = 1;
				System.out.println("inserto: "+a.getDescripcion());
			}else{
				tenia = rsSelect.getInt("compra2"); //guardo cuantas unidades tenia cargadas.
				st = con.prepareStatement(UPDATEARTICULO);	
				st.executeUpdate();	
				orden = 2;
				System.out.println("actualizo: "+a.getDescripcion());
			}
			
			int ejecuto = 0;
			
			rsSelect = stSelect.executeQuery();	
			rsSelect.next();
			float cant = rsSelect.getFloat(4);
			
			if(orden == 1){
				ejecuto = (int) (cant - a.getCompra());
			}else{ //orden ==2
				ejecuto = (int) (cant - tenia - a.getCompra());
			}
			
			close(null, st, null);
			close(rsSelect, stSelect, con);
			return ejecuto;
		}catch(Exception e){
			System.out.println("exception al intentar insertar: "+a.getDescripcion());
			e.printStackTrace();
			return 1;
		}
			
	}
	

	public static void main(String[] args) {
		FisicaStock p = new FisicaStock();
		p.lisOperador();


	}

}
